/*
  支付宝<12月摇一摇>

  已知问题：

  Q：使用脚本后容易出现活动火爆提醒
  A：暂时增加随机等待时间，观察是否缓解

  待更新功能：
  当前获得金币奖励和红包奖励统计
  当前总金币和总红包统计

  20211203 V1.0
  根据10月版本修改而来
  20211204 V1.1
  增加金币奖励识别
*/

auto.waitFor();//无障碍服务检测
console.show();//开启悬浮窗
setScreenMetrics(1440, 3120);//声明是基于分辨率1440，3120的点击
console.info("支付宝<12月摇一摇>任务");
sleep(1000);
console.log("即将启动<支付宝>"); 
app.launchApp("支付宝");//打开支付宝 //如果在分身应用中无法跳转，可屏蔽此行
var RewardTimes=0//金币奖励次数
var NullRewardTimes=0//无奖励摇红包次数
var ShakeHongBaoTimes=0//摇红包次数
var GoldCoinQty=0//本次金币数量
var Status=1//运行状态（0：等待奖励中，不可摇红包；1：可摇红包）
while (text("摇一摇，领红包").findOnce() == null) {
  console.info("未找到活动界面，请手动进入");
  sleep(3000);
}
if (text("摇一摇，领红包").findOne() == null) {
  while (text("摇一摇，领红包").findOne() == null) {
    console.info("未找到活动界面，请手动进入");
    sleep(3000);
  }
}
if (text("摇一摇，领红包").exists()) {
  console.info("成功进入活动界面");
  sleep(random(1000,1500));
}
for(;;){
  if((text("开").exists() |textContains("恭喜").exists() |textContains("继续摇").exists() |text("到店付款可当现金用").exists()) && Status==0){
    console.log("恭喜中奖！");
    sleep(random(500,1000));
    RewardTimes=RewardTimes+1;
    while(!textContains("到店付款").exists()){
      console.log("等待开奖");
      sleep(2000);
      if(className("android.widget.Button").text("关闭").exists()){
        break;
      }
    }
    if(textContains("到店付款").exists()){
      console.log("摇到<红包>");
    }
    else if(textContains("金币").exists()){
      console.log("摇到<金币>");
    }
    else{
      console.log("摇到<优惠券>");//除了红包、金币，其他都是优惠券
    }
    console.log("第"+RewardTimes+"次<奖励>领取成功");
    sleep(random(1000,1500));
    NullRewardTimes=0;//获得奖励后，重新开始计算次数
    className("android.widget.Button").text("关闭").findOne().click();
    Status=1;//窗口关闭，还原状态
    sleep(random(1000,1500)+1000);
    continue;
  }
  //已到今日上限，结束循环，退出脚本
  else if(text("明天再来").exists() && Status==0){
    sleep(random(1000,1500));
    text("明天再来").findOne().click();
    console.error("已到今日上限，即将退出脚本");
    Status=1;//窗口关闭，还原状态
    break;
  }
  //如果提示提示活动火爆，等待5秒后再进入循环
  else if((text("好的，等会再来").exists() |text("好的，我知道了").exists() | textContains("人太多").exists() |text("一会再来").exists()) && Status==0){
    sleep(random(1000,1500));
    className("android.widget.Button").text("关闭").findOne().click();
    Status=1;//窗口关闭，还原状态
    console.error("活动火爆，等待5秒");
    NullRewardTimes=NullRewardTimes+5;//一次火爆，等于多次无奖励，以尽快退出脚本
    sleep(random(1000,2000)+4000);
    continue;
  }
  //没有摇到红包，关闭弹窗后，直接进入下次循环
  else if(className("android.widget.Button").text("关闭").exists() && Status==0) {
    sleep(random(1000,1500));
    className("android.widget.Button").text("关闭").findOne().click();
    console.log("关闭");
    NullRewardTimes=NullRewardTimes+1;
    Status=1;//窗口关闭，还原状态
    sleep(random(1000,1500));
  }
  //多次无奖励后，退出脚本
  if(NullRewardTimes > 20){
    console.error("连续20次无奖励，即将退出脚本");
    sleep(1000);
    break;
  }
  if(Status==1){
    click(720,2111);
    Status=0;//更新状态，等待后续窗口
    ShakeHongBaoTimes=ShakeHongBaoTimes+1;
    console.info("第"+ShakeHongBaoTimes+"次摇红包" );
    sleep(random(1000,1500));
  }
}

console.log("结束任务");
home();
sleep(1000);
console.log("已退出脚本"); 
engines.myEngine().forceStop()